<?php

namespace app\common\controller;

use think\Controller;
use think\facade\Env;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;

class Alipay extends Controller
{

    //$order_no 订单号
    //$money 支付金额
    //$content// 备注
    //$way//支付方式
    //$url 回调地址
    public function alipay($order_no,$money,$content,$way,$url,$return_url='')
    {
        $config = [
            'app_id' => config('alipay_appid'),
            'notify_url' => url($url,'','',true), // 支付宝异步通知地址
            'return_url' => config('payok'),
            'ali_public_key' =>file_get_contents(Env::get('app_path').'common/payment/alipay_public_key.txt'), // 微信支付签名秘钥
            'private_key' =>  file_get_contents(Env::get('app_path').'common/payment/alipay_private_key.txt'),
            'log' => [ // optional
                'file' => './logs/alipay.log',
                'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
                'type' => 'single', // optional, 可选 daily.
                'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
            ],
            'http' => [ // optional
                'timeout' => 5.0,
                'connect_timeout' => 5.0,
                // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
            ],
            'mode' => 'normal', // optional,设置此参数，将进入沙箱模式
        ];
        if($way=='web'){
            $config['return_url']=url($return_url,'','',true);
        }
        $order = [
            'out_trade_no' => $order_no,
            'total_amount' => $money,
            'subject' => $content,
        ];

        $alipay = Pay::alipay($config);
        if($way=='web'){
           // return $alipay->web($order)->send(); // laravel 框架中请直接 return $alipay->web($order)
            return  $alipay->web($order)->getContent();
        }else if($way=='wap'){
            return $alipay->wap($order)->send(); // laravel 框架中请直接 return $alipay->wap($order)
        }else  if($way=='app'){
            return $alipay->app($order)->send(); // laravel 框架中请直接 return $alipay->app($order)
        }
    }


    /**
     * 支付宝退款
     * @param $order_no[订单号]
     * @param $money[金额]
     * @param $tui_orderno[退款订单号]
     */
    public function refund($order_no,$money,$tui_orderno)
    {
        $config = [
            'app_id' => config('alipay_appid'),
            //'notify_url' => url($url,'','',true), // 支付宝异步通知地址
            'return_url' => config('payok'),
            'ali_public_key' =>file_get_contents(Env::get('app_path').'/common/payment/alipay_public_key.txt'),               // 微信支付签名秘钥
            'private_key' =>  file_get_contents(Env::get('app_path').'/common/payment/alipay_private_key.txt'),
            'log' => [ // optional
                'file' => './logs/alipay.log',
                'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
                'type' => 'single', // optional, 可选 daily.
                'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
            ],
            'http' => [ // optional
                'timeout' => 5.0,
                'connect_timeout' => 5.0,
                // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
            ],
            'mode' => 'normal', // optional,设置此参数，将进入沙箱模式
        ];
        $order = [
            'out_trade_no' => $order_no,
            //'trade_no'=>$tui_orderno,
            'refund_amount' => $money,
        ];
        $alipay = Pay::alipay($config);
        $result = $alipay->refund($order);
        return $result;

    }

//    public function return()
//    {
//        $data = Pay::alipay($this->config)->verify(); // 是的，验签就这么简单！
//
//        // 订单号：$data->out_trade_no
//        // 支付宝交易号：$data->trade_no
//        // 订单总金额：$data->total_amount
//    }

    /**
     * 支付宝回调
     * @param $arr
     * @return bool|string
     */
    public function notify($arr)
    {

        $config = [
            'app_id' => config('alipay_appid'),
            'notify_url' => url('','','',true), // 支付宝异步通知地址
            'return_url' => config('payok'),
            'ali_public_key' =>file_get_contents(Env::get('app_path').'/common/payment/alipay_public_key.txt'),               // 微信支付签名秘钥
            'private_key' =>  file_get_contents(Env::get('app_path').'/common/payment/alipay_private_key.txt'),
            'log' => [ // optional
                'file' => './logs/alipay.log',
                'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
                'type' => 'single', // optional, 可选 daily.
                'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
            ],
            'http' => [ // optional
                'timeout' => 5.0,
                'connect_timeout' => 5.0,
                // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
            ],
            'mode' => 'normal', // optional,设置此参数，将进入沙箱模式
        ];
        $alipay = Pay::alipay($config);
        try{
            $data = $alipay->verify($arr); // 是的，验签就这么简单！
            if($data){
                return true;
            }
        } catch (\Exception $e) {
            return $e->getMessage();
            // $e->getMessage();
        }

    }
}